﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Entidades;
using DAO;
using System.Drawing;

public partial class proClase : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        cargaGrillaClases();
            
    }

    private void cargaCombos()
    {
        ddlActividad.DataSource = ActividadDAO.obtenerActividades();
        ddlActividad.DataTextField = "Descripcion";
        ddlActividad.DataValueField = "Id";
        ddlActividad.DataBind();

        ddlSala.DataSource = SalaDAO.obtenerSala();
        ddlSala.DataTextField = "Descripcion";
        ddlSala.DataValueField = "Id";
        ddlSala.DataBind();

        ddlProfesor.DataSource = ProfesorDAO.obtenerProfesores();
        ddlProfesor.DataTextField = "nombreApellido";
        ddlProfesor.DataValueField = "Id";
        ddlProfesor.DataBind();
        cargaComboHoras();

    }

    private void cargaComboHoras()
    {
        if (ddlHoraInicio.Items.Count == 0 && ddlHoraFin.Items.Count == 0 && ddlMinutosFin.Items.Count == 0 && ddlMinutosInicio.Items.Count == 0)
        {
            for (int i = 8; i <= 22; i++)
            {
                ddlHoraInicio.Items.Add(new ListItem(i.ToString(), i.ToString()));
                int iFin = i + 1;
                ddlHoraFin.Items.Add(new ListItem(iFin.ToString(), iFin.ToString()));
            }

            for (int i = 0; i <= 59; i = i + 5)
            {
                string minutos = i.ToString();
                if (minutos.Length == 1)
                    minutos = string.Concat("0", minutos);
                ddlMinutosInicio.Items.Add(new ListItem(minutos, minutos));
                ddlMinutosFin.Items.Add(new ListItem(minutos, minutos));
            }
        }
    }


    protected void ddlAgregarHorario_Click(object sender, EventArgs e)
    {
        try
        {
            Clase clase = new Clase();
            if (ViewState["Clase"] != null)
            {
                clase = (Clase)ViewState["Clase"];
            }
            Horarios horario = new Horarios();
            //clase.Id = int.Parse(txtIdClase.Value);
            horario.Dia = ddlDia.SelectedValue;
            horario.HoraInicio = new TimeSpan(int.Parse(ddlHoraInicio.SelectedValue), int.Parse(ddlMinutosInicio.SelectedValue), 0);
            horario.HoraFin = new TimeSpan(int.Parse(ddlHoraFin.SelectedValue), int.Parse(ddlMinutosFin.SelectedValue), 0);
            if (ClaseDAO.validarHorarios(horario, clase))
            {
                clase.ListadoHorarios.Add(horario);
                lblHorario.Text = "Horario agregado correctamente";
            }
            else
            {
                lblHorario.Text = "El dia que intenta ingresar ya tiene una clase o ingreso una hora de inicio superior a una hora de fin";
            }
            dgvHorarios.DataSource = clase.ListadoHorarios;
            dgvHorarios.DataBind();
            ViewState["Clase"] = clase;
        }
        catch (SystemException ex)
        {
            lblError.Text = "Error al agregar el horario: " + ex.Message;
        }
    }
    protected void dgvHorarios_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        try
        {
            if (e.CommandName == "EliminarHorario")
            {
                Clase clase = new Clase();
                clase = (Clase)ViewState["Clase"];
                Horarios horario = new Horarios();
                int index = Convert.ToInt32(e.CommandArgument);
                clase.ListadoHorarios.RemoveAt(index);
                dgvHorarios.DataSource = clase.ListadoHorarios;
                dgvHorarios.DataBind();
            }
        }
        catch (SystemException ex)
        {
            lblError.Text = "Error al eliminar el horario: " + ex.Message;
        }
    }
    protected void btnAgregarClase_Click(object sender, EventArgs e)
    {
        try
        {
            Clase clase = new Clase();
            if (ViewState["Clase"] != null)
            {
                clase = (Clase)ViewState["Clase"];
            }
            if (clase.ListadoHorarios.Count == 0)
            {
                lblError.Text = "Debe ingresar al menos un horario para la clase";
            }
            else
            {
                clase.Actividad.Id = int.Parse(ddlActividad.SelectedValue);
                clase.Profesor.Id = int.Parse(ddlProfesor.SelectedValue);
                clase.Sala.Id = int.Parse(ddlSala.SelectedValue);
                ClaseDAO.agregarClase(clase);
                pnlAlta.Visible = false;
                pnlListado.Visible = true;
                lblError.ForeColor = Color.Green;
                lblError.Text = "Clase insertada correctamente";
                cargaGrillaClases();
            }
        }
        catch (SystemException ex)
        {
            lblError.Text = "Error al agregar la clase: " + ex.Message;
        }
    }

    public void cargaGrillaClases()
    {
        try
        {
            dgvClase.DataSource = ClaseDAO.obtenerClases();
            dgvClase.DataKeyNames = new string[] { "Id" };
            dgvClase.DataBind();
        }
        catch (SystemException ex)
        {
            lblError.Text = ex.Message;
        }
    }
    protected void dgvClase_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        dgvClase.PageIndex = e.NewPageIndex;
        dgvClase.DataBind();
    }
    protected void btnEliminar_Command(object sender, CommandEventArgs e)
    {
        try
        {
            int index = Convert.ToInt32(e.CommandArgument);
            Clase clase = new Clase();
            clase.Id = int.Parse(dgvClase.DataKeys[index].Value.ToString());
            if (e.CommandName == "EliminarClase")
            {
                ClaseDAO.bajaClase(clase);
                cargaGrillaClases();
            }
            if (e.CommandName == "ModificarClase")
            {
                pnlAlta.Visible = true;
                pnlHorarios.Visible = false;
                pnlListado.Visible = false;
                clase = ClaseDAO.buscarClaseId(clase);
                cargaCombos();
                ddlActividad.SelectedValue = clase.Actividad.Id.ToString();
                ddlProfesor.SelectedValue = clase.Profesor.Id.ToString();
                ddlSala.SelectedValue = clase.Sala.Id.ToString();
                txtIdClase.Value = clase.Id.ToString();
                btnAgregarClase.Visible = false;
                btnModificarClase.Visible = true;
            }
            if (e.CommandName == "AgregarAlumnos")
            {
                Response.Redirect("abmSocioXClase.aspx?clase=" + clase.Id);
            }
            if (e.CommandName == "ModificarHorario")
            {
                Response.Redirect("modificarHorario.aspx?clase=" + clase.Id);
            }
        }
        catch (SystemException ex)
        {
            lblError.Text = ex.Message;
        }
    }
    protected void btnNuevaClase_Click(object sender, EventArgs e)
    {
        pnlAlta.Visible = true;
        pnlHorarios.Visible = true;
        ViewState["Clase"] = null;
        btnAgregarClase.Visible = true;
        btnModificarClase.Visible = false;
        dgvHorarios.DataSource = null;
        dgvHorarios.DataBind();
        cargaCombos();
        pnlAlta.Visible = true;
        pnlListado.Visible = false;
        lblError.Text = "";
        lblHorario.Text = "";
    }
    protected void btnModificarClase_Click(object sender, EventArgs e)
    {
        try
        {
            Clase clase = new Clase();
            clase.Id = int.Parse(txtIdClase.Value);
            clase.Actividad.Id = int.Parse(ddlActividad.SelectedValue);
            clase.Profesor.Id = int.Parse(ddlProfesor.SelectedValue);
            clase.Sala.Id = int.Parse(ddlSala.SelectedValue);
            ClaseDAO.modificarClase(clase);
            pnlAlta.Visible = false;
            pnlListado.Visible = true;
            lblError.ForeColor = Color.Green;
            lblError.Text = "Clase modificada correctamente";
            cargaGrillaClases();
        }
        catch (SystemException ex)
        {
            lblError.Text = ex.Message;
        }
    }
    protected void btnVolverListado_Click(object sender, EventArgs e)
    {
        pnlAlta.Visible = false;
        pnlListado.Visible = true;
    }
}